import javafx.scene.transform.Scale;

import java.io.IOException;
import java.net.*;
import java.util.Scanner;

//客户端代码
public class EchoClient {
    private String serverIp=null;
    private int serverPort=0;
    private DatagramSocket socket=null;
    //这里的socket对象不需要显式绑定一个端口，让操作系统自动分配一个端口
    //随机挑取一个空闲的——>端口没有别的进程在使用
    //一次通信，需要有两个IP，两个端口
    //客户端的IP是127.0.0.1已知。客户端的port是系统自动分配的
    //服务器的ip和端口也需要告诉客户端，才能顺利把消息发给服务器
    public EchoClient(String serverIp,int serverPort) throws SocketException {
        socket=new DatagramSocket();
        this.serverIp=serverIp;
        this.serverPort=serverPort;
    }
    public void start() throws IOException {
        System.out.println("客户端启动！");
        Scanner scanner=new Scanner(System.in);
        while(true){
            //1.从控制台读取要发送的数据
            System.out.println(">");
            String request=scanner.next();
            if(request.equals("exit")){
                System.out.println("goodbye");
                break;
            }
            //2.构造成UDP请求，并发送
            //构造这个packet的时候，需要把serverIp和port都传入进来。
            //由于此处的Ip地址需要填写的是一个32位的整数形式，上述的Ip地址是一个字符串，所以需要使用    InetAddress.getByName()进行转化
            DatagramPacket datagramPacket=new DatagramPacket(request.getBytes(),request.getBytes().length,
                    InetAddress.getByName(serverIp),serverPort);
            socket.send(datagramPacket);
            //3.读取服务器的UDP响应，并解析
            DatagramPacket responsePacket=new DatagramPacket(new byte[4096],4096);
            socket.receive(responsePacket);
            //4.把解析好的结果显示出来
            String response=new String(responsePacket.getData(),0,responsePacket.getLength());
            System.out.println(response);
        }
    }

    public static void main(String[] args) throws IOException {
        EchoClient echoClient=new EchoClient("127.0.0.1",9090);
        echoClient.start();
    }
}
